Current graphics data processing includes systems and methods developed to perform a specific operation on graphics data. Operations such as geometric transformations are applied to a plurality of graphics primitives and constants used during those operations are conventionally stored in a local memory such as a register file or random access memory (RAM).
FIG. 1 is a block diagram of an exemplary embodiment of a prior art Graphics Processing System 100. An Input 105 includes graphics primitives and commands. A Controller 110 receives the commands, including commands to write constants to a Constant Storage 130, e.g., RAM or a register file. Controller 110 outputs graphics primitives and commands to each Processing Unit 120 and processed graphics primitives are output by each Processing Unit 120 to each Output 125. Each Processing Unit 120 reads the constants from Constant Storage 130 while processing the graphics primitives.
Prior to writing a constant to Constant Storage 130, Controller 110 must obtain exclusive write access to Constant Storage 130 to ensure that a constant is not inadvertently modified before being read by either Processing Unit 120. Therefore, Controller 110 determines that each Processing Unit 120 is idle before writing a constant to Constant Storage 130, blocking a unit providing Input 105 if needed until the constant is modified. Blocking Input 105 reduces the throughput of Graphics Processing System 100. Furthermore, when Processing Units 120 are many pipeline stages deep, one Processing Unit 120 may be idle for many clock cycles before the other Processing Unit 120 completes processing and becomes idle.
Accordingly, it would be desirable to provide improved approaches to updating constants accessed by one or more graphics processing units.